package com.goodcol.plugin.tool;

import com.goodcol.plugin.dto.SettingsStorageDTO;
import com.goodcol.plugin.entity.ColumnConfigGroup;
import com.goodcol.plugin.entity.GlobalConfigGroup;
import com.goodcol.plugin.entity.TemplateGroup;
import com.goodcol.plugin.entity.TypeMapperGroup;
import com.goodcol.plugin.service.SettingsStorageService;

import java.util.Map;

/**
 * 当前分组配置获取工具
 *
 * @author QuickCode
 * @version 1.0.0
 */
public final class SettingGroupUtils {
    /**
     * 禁用构造方法
     */
    private SettingGroupUtils() {
        throw new UnsupportedOperationException();
    }

    /**
     * 获取当前模板组对象
     *
     * @return 模板组对象
     */
    public static TemplateGroup getCurrTemplateGroup() {
        return getTemplateByGroup(SettingsStorageService.getSettingsStorage().getCurrTemplateGroupName());
    }

    /**
     * 获取Default模板组对象
     *
     * @return 模板组对象
     */
    public static TemplateGroup getDefaultTemplateGroup() {
        return getTemplateByGroup(Constants.DEFAULT_GROUP_NAME);
    }

    /**
     * 获取目标模板组对象，如果目标Group不存在返回Default组
     *
     * @param groupName groupName
     * @return 模板组对象
     */
    public static TemplateGroup getTemplateByGroup(String groupName) {
        SettingsStorageDTO settingsStorage = SettingsStorageService.getSettingsStorage();
        return settingsStorage.getTemplateGroupMap().get(groupName);
    }


    /**
     * 获取当前全局配置组对象
     *
     * @return 全局配置组对象
     */
    public static GlobalConfigGroup getCurrGlobalConfigGroup() {
        return getGlobalConfigByGroup(SettingsStorageService.getSettingsStorage().getCurrGlobalConfigGroupName());
    }

    /**
     * 获取Default全局配置组对象
     *
     * @return 全局配置组对象
     */
    public static GlobalConfigGroup getDefaultGlobalConfigGroup() {
        return getGlobalConfigByGroup(Constants.DEFAULT_GROUP_NAME);
    }

    /**
     * 获取目标全局配置组对象，如果目标Group不存在返回Default组
     *
     * @param groupName groupName
     * @return 全局配置组对象
     */
    public static GlobalConfigGroup getGlobalConfigByGroup(String groupName) {
        SettingsStorageDTO settingsStorage = SettingsStorageService.getSettingsStorage();
        return settingsStorage.getGlobalConfigGroupMap().get(groupName);
    }

    /**
     * 获取当前类型映射组对象
     *
     * @return 类型映射组对象
     */
    public static TypeMapperGroup getCurrTypeMapperGroup() {
        return getTypeMapperByGroup(SettingsStorageService.getSettingsStorage().getCurrTypeMapperGroupName());
    }

    /**
     * 获取Default类型映射组对象
     *
     * @return 类型映射组对象
     */
    public static TypeMapperGroup getDefaultTypeMapperGroup() {
        return getTypeMapperByGroup("Default");
    }

    /**
     * 获取目标Group映射组对象
     *
     * @param groupName groupName
     * @return 类型映射组对象
     */
    public static TypeMapperGroup getTypeMapperByGroup(String groupName) {
        return SettingsStorageService.getSettingsStorage().getTypeMapperGroupMap().get(groupName);
    }

    /**
     * 获取当前列配置组对象
     *
     * @return 列配置组对象
     */
    public static ColumnConfigGroup getCurrColumnConfigGroup() {
        return getColumnConfigByGroup(SettingsStorageService.getSettingsStorage().getCurrColumnConfigGroupName());
    }

    /**
     * 获取Default列配置组对象
     *
     * @return 列配置组对象
     */
    public static ColumnConfigGroup getDefaultColumnConfigGroup() {
        return getColumnConfigByGroup(Constants.DEFAULT_GROUP_NAME);
    }

    /**
     * 获取目标Group配置组对象，如果目标Group不存在返回Default组
     *
     * @param groupName groupName
     * @return 列配置组对象
     */
    public static ColumnConfigGroup getColumnConfigByGroup(String groupName) {
        SettingsStorageDTO settingsStorage = SettingsStorageService.getSettingsStorage();
        return settingsStorage.getColumnConfigGroupMap().get(groupName);
    }

}
